﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using GestionIncidencias.Models;

using RESTService.Persistencia;
using RESTService.Dominio;

namespace GestionIncidencias.Controllers
{
    public class ServicioController : Controller
    {

        /*  REST */

        public ActionResult RegistrarServicio()
        {
            var model = new ServicioModel();
            return View(model);
        }

        
        public ActionResult ModificarServicio(string codigo)
        {
            var model = new ServicioModel();
            model.obtenerServicio(codigo);
            return View(model);
        }


        public ActionResult EliminarServicio(int codigo)
        {
            var model = new ServicioModel();

            model.eliminarServicio(codigo.ToString());
            model.ListarServicio();
            return View("ListarServicio", model.lstServicio);
        }

        public ActionResult ListarServicio()
        {
            var model = new ServicioModel();
            model.ListarServicio();
            return View(model.lstServicio);
        }

        [HttpPost]
        public ActionResult GrabarNuevoServicio(int Codigo, string Nombre, string Descripcion)
        {
          if (Codigo <  0 )
                ViewData["Error"] = "Debe ingresar codigo";
            else if (Nombre.Trim().Equals(""))
                ViewData["Error"] = "Debe ingresar Nombre de servicio";
            else if (Descripcion.Trim().Equals(""))
                ViewData["Error"] = "Debe ingresar descripcion para el servicio";
            
                var model = new ServicioModel();
                if (ViewData["Error"] == null)
                {
                    Servicio servicio = new Servicio();
                    servicio.Codigo = Codigo;
                    servicio.Nombre = Nombre;
                    servicio.Descripcion = Descripcion;
                                        
                    string resultado = model.nuevoServico(servicio);
                    if (resultado.Equals(""))
                    {
                        model.ListarServicio();
                        return View("ListarServicio", model.lstServicio);
                    }
                    else
                    {
                        ViewData["Error"] = resultado;
                        model.Codigo = Codigo.ToString();
                        model.Nombre = Nombre;
                        model.Descripcion = Descripcion;
                        return View("RegistrarServicio", model);
                    }
                }
                else
                {
                    model.Codigo = Codigo.ToString(); ;
                    model.Nombre = Nombre;
                    model.Descripcion = Descripcion;
                    return View("RegistrarServicio", model);
                }

                
            
        }




        private List<Servicio> CrearServicios()        
        {

            List<Servicio> serviciosModel = null;

                     
         ServicioDAO serviciosDAO = new ServicioDAO();

         List<Servicio> servicios = serviciosDAO.ListarTodos();


         serviciosModel = new List<Servicio>();

         if (servicios.Count != 0)
         {
             

             foreach (Servicio servicio in servicios)
             {
                 Servicio servicioModel = new Servicio();

                 servicioModel.Codigo = servicio.Codigo;
                 servicioModel.Nombre = servicio.Nombre;
                 servicioModel.Descripcion = servicio.Descripcion;
                 serviciosModel.Add(servicioModel);
                 

             }           
         }
         else {
             //---- Crear por defaul a la base de datos --- 
             serviciosModel.Add(new Servicio() { Codigo = 1, Nombre = "SAP R3 Supermercados", Descripcion = "Sistema Comercial de Supermercados" });
             serviciosModel.Add(new Servicio() { Codigo = 2, Nombre = "SAP R3 Recursos Humanos", Descripcion = "Sistema de Recursos Humanos" });
             serviciosModel.Add(new Servicio() { Codigo = 3, Nombre = "Sistema de Promociones", Descripcion = "Sistema de Promociones para Línea de Cajas" });
         }


         return serviciosModel;
        }


        private Servicio ObtenerServicio(int codigo)
        {
            List<Servicio> servicios = (List<Servicio>)Session["servicios"];
            Servicio model = servicios.Single(delegate(Servicio servicio)
            {
                if (servicio.Codigo == codigo) return true;
                else return false;
            });
            return model;
        }



        public ActionResult Index()
        {        
            
            if (Session["servicios"] == null)
                Session["servicios"] = CrearServicios();
            List<Servicio> model = (List<Servicio>)Session["servicios"];
            return View(model);





        }
        public ActionResult Details(int id)
        {
            Servicio model = ObtenerServicio(id);
            return View(model);
        }


        // GET: /Servicio/Create
        public ActionResult Create()
        {
            return View();
        } 


        // POST: /Servicio/Create
        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    List<Servicio> servicios = (List<Servicio>)Session["servicios"];
                    servicios.Add(new Servicio()
                    {
                        Codigo = int.Parse(collection["Codigo"]),
                        Nombre = collection["Nombre"],
                        Descripcion = collection["Descripcion"],

                       
                    }



                    );
                    return RedirectToAction("Index");
                }
                catch
                {
                }
            }
                return View();
        }
        

        // GET: /Servicio/Edit/5 
        public ActionResult Edit(int id)
        {
            Servicio model = ObtenerServicio(id); 
            return View(model);
        }
        // POST: /Servicio/Edit/5
        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    Servicio model = ObtenerServicio(id);
                    model.Nombre = collection["Nombre"];
                    model.Descripcion = collection["Descripcion"];
                    return RedirectToAction("Index");
                }
                catch
                {
                }
            }
                return View();
        }

        //
        // GET: /Servicio/Delete/5
 
        public ActionResult Delete(int id)
        {
            Servicio model = ObtenerServicio(id);
            return View(model);
        }

        //
        // POST: /Servicio/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                List<Servicio> servicios = (List<Servicio>)Session["servicios"];
                servicios.Remove(ObtenerServicio(id));
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
